apache 访问控制

allow 和 deny 规则

        首先举例:

1
2
3
Order deny,allow
deny from all
allow from 127.0.0.1

        我们判断的依据是这样的:

  1. 看 Order 后面的,哪个在前,哪个在后
  2. 如果 deny 在前,那么就需要看 deny from 这句,然后看 allow from 这一句
  3. 规则是一条一条的匹配的,不管是 deny 在前还是 allow 在前,都是会生效的。比如例子中,先 deny 了所有,然后又 allow 了127.0.0.1,所以 127.0.0.1 是通过的。

        例子:

1
2
3
Order allow,deny
Deny from all
Allow from 127.0.0.1

        这个就会 deny 所有了, 127.0.0.1也会被 deny 。因为顺序是先 allow 然后 deny ,虽然一开始 allow 了127.0.0.1,但是后面又拒绝了它。

1
2
Order allow,deny
Deny from all

        上面的规则就表示,全部都不能通

1
2
Order deny,allow
Deny from all

        上面的规则就表示,全部都不能通

1
Order deny,allow

        只有顺序,没有具体的规则,表示,全部都可以通行(默认的),因为 allow 在最后。

1
Order allow,deny

        这个表示,全部都不能通行(默认的),因为 deny 在最后。

  1. 做某个目录闲置,只允许内网 ip 访问,这个目录可以是网站根目录,也就是整个站点都要做限制了。
1
2
3
4
5
6
7
8
9
10
[root@lamp ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<Directory "/data/www、">
AllowOverride None
Options None
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>

        说明:只允许 127.0.0.1 访问,其他 ip 全部拒绝。

  1. 针对请求的 uri 去限制,前面安装的 discuz 论坛,访问后台是 admin.php,那么就可以针对这个 admin.php 做限制。
1
2
3
4
5
6
<filesmatch "(.*)admin(.*)">
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</filesmatch>
`

        说明:这里用到了 filesmatch 语法,表示匹配的意思。

        检测是否有错,重启apache 服务

1
2
3
[root@lamp ~]# apachectl -t
Syntax OK
[root@lamp ~]# apachectl restart

        用curl 测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@lamp ~]# curl -x192.168.0.99:80 -I www.test.com/admin.php
HTTP/1.1 403 Forbidden
Date: Thu, 05 Jan 2017 10:37:38 GMT
Server: Apache/2.2.31 (Unix) PHP/5.6.6
Content-Type: text/html; charset=iso-8859-1
[root@lamp ~]# curl -x127.0.0.1:80 -I www.test.com/admin.php
HTTP/1.1 200 OK
Date: Thu, 05 Jan 2017 10:37:40 GMT
Server: Apache/2.2.31 (Unix) PHP/5.6.6
X-Powered-By: PHP/5.6.6
Set-Cookie: cbq6_2132_saltkey=W35308HL; expires=Sat, 04-Feb-2017 10:37:40 GMT; Max-Age=2592000; path=/; httponly
Set-Cookie: cbq6_2132_lastvisit=1483609060; expires=Sat, 04-Feb-2017 10:37:40 GMT; Max-Age=2592000; path=/
Set-Cookie: cbq6_2132_sid=PUbGdd; expires=Fri, 06-Jan-2017 10:37:40 GMT; Max-Age=86400; path=/
Set-Cookie: cbq6_2132_lastact=1483612660%09admin.php%09; expires=Fri, 06-Jan-2017 10:37:40 GMT; Max-Age=86400; path=/
Cache-Control: max-age=0
Expires: Thu, 05 Jan 2017 10:37:40 GMT
Content-Type: text/html; charset=gbk

        本机 ip 192.168.0.99 被拒绝,而 127.0.0.1 可以访问。

Apache设置禁止访问.txt文件

        做了目录禁止浏览后,目录下面的txt文件还是可以显示里面的内容的。

        解决办法:

1
2
3
4
Options -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Deny from all

apache 禁止trace或track防止xss攻击

        TRACE和TRACK是用来调试web服务器连接的HTTP方式。

        支持该方式的服务器存在跨站脚本漏洞,通常在描述各种浏览器缺陷的时候,把”Cross-Site-Tracing”简称为XST。

        攻击者可以利用此漏洞欺骗合法用户并得到他们的私人信息。

        禁用trace可以使用rewrite功能来实现

1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCondi %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>

        或者还可以直接在apache的配置文件中配置相应参数

1
TraceEnable off